梦入琼楼寒有月,行过石树冻无烟

PHP 数组

数组是对大量数据进行组织和管理的主要和有效手段之一,许多信息都已数组作为数据的载体,经常需要使用数组进行处理数据。在PHP中,数组主要包含两个参数。

数组的创建与初始化和输出

Array 数组创建

array() 标准数组 (键名、键值)!
1
2
3
<?php
$arrayName = array("ONE" => "one", "TWO" => "two");
?>
array() 键值数组 (键值)!
1
2
3
<?php
$one = array(1,2,3,4);
?>
array() 省略键名 (省略键名+键值)!
1
2
3
<?php
$array = array('1' => 2, 2 => 4, 3 => 6,7,8);
?>

创建

变量创建数组 (compact)!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$a = 10;
$b = "one";
$c = array(1,2,3);
$array = compact("a","b","c");
print_r($array);
?>
</body>
</html>
两个键值创建一个数组 (array_combine)!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array("one","two","three");
$two = array("ONE","TWO","THREE");
$three = array_combine($one, $two);
print_r($three);
?>
</body>
</html>
自动建立数组 (arr[n])!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arr[0] = "a";
$arr[1] = "b";
$arr[2] = "c";
print_r($arr);
?>
</body>
</html>
将数组赋值给指定变量 (list)!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$one = array("红","白","蓝","橙");
list($one,$two,$three,$four) = $one;
echo "$one";
?>
</body>
</html>

输出

1
2
3
4
5
6
7
8
9
10
11
12
13
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$array = array('1' => 2, 2 => 4, 3 => 6,7,8);
print_r($array);
?>
</body>
</html>
$array[“键名”];
1
2
3
4
<?php
$one = array("蓝" => "蓝色","白" => "白色","红" => "红色","绿" => "绿色");
echo $one["蓝"];
?>
$array[“键值”];
1
2
3
4
<?php
$one = array("红色","蓝色","绿色,","黑色","白色");
echo $one[0];
?>
输出数组中的所有键名 (array_keys) !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'two' => 2,'three' => 3);
$one = array_keys($arrayName);
print_r($one);
?>
</body>
</html>
输出数组中所有的键值 (array_values)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'two' => 2,'three' => 3);
$one = array_values($arrayName);
print_r($one);
?>
</body>
</html>
移除数组中重复的值 (array_unique)!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'one' => 1,'three' => 3);
$one = array_unique($arrayName);
print_r($one);
?>
</body>
</html>

键名和键值的操作

检查键值是否存在 (in_array)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'two' => 2,'three' => 3);
if (in_array(1, $arrayName)) {
echo "存在键值1";
} else {
echo "不存在";
}
?>
</body>
</html>
检查键名是否存在 (!array_key_exists)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'two' => 2,'three' => 3);
if (array_key_exists('one', $arrayName)) {
echo "存在键名";
} else {
echo "不存在键名";
}
?>
</body>
</html>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('one' => 1,'two' => 2,'three' => 3);
$key = array_search('1', $arrayName);
if ($key == NULL) {
echo "数组不存在";
} else {
echo "$key";
}
?>
</body>
</html>

array_search与上述方法不同,上述方法如果键值存在则返回true,不存在则返回false,而array_search则是根据键值是否存在,如果键值存在则返回键名,如果不存在则返回NULL

数组的遍历与输出

while 循环
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array(1,2,3,4,5,6);
while (list($key,$value) = each($one)) {
echo "$value";
echo "<br>";
}
?>
</body>
</html>

while循环、list和each方法的结合使用可以实现对数组的遍历,list方法重要的作用是将数组中的键值赋值给变量。each方法主要作用是返回当前的键名和值(并将数组指针移到下一位)

foreach 循环
1
2
3
4
5
6
7
8
9
<?php 
$arrayName = array('one' => 'one','two' => 'two');
foreach ($arrayName as $value) {
# code...
}
foreach ($arrayName as $key => $value) {
# code...
}
?>

实例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array('one' => 'ONE','two' => 'TWO','three' => 'THREE' );
foreach ($one as $value) { // 输出数组的键值
echo "$value";
echo "<br>";
echo "<br>";
}
foreach ($one as $key => $value) { // 输出数组的键名和键值
echo $key. "=>".$value. "<br>";
}
?>
</body>
</html>

function循环时专门用于遍历数组的循环,每次循环的同时,当前单元的值会被付给$value,并且将数组内部的指针向前移动一步.,然后第二次循环和第一次循环一样,只不过当前单元的键名也会在每次循环变量中赋值给 $key

数组的排序

升序
sort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array('a' => 1,'c' => 3,'b' => 2);
if (sort($one)) {
print_r($one);
}
?>
</body>
</html>

sort()函数不仅仅对数组进行了重新排序,同时还删除了原来数组的键名,并重新分配索引。

asort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array('c' => 'cccc', 'd' => 'ddddd','a' => 'aaaaaa','e' => 'eeee');
asort($one);
print_r($one);
?>
</body>
</html>

asort()函数与sort()函数不同,数组重新排序后仍然还保持着键名和键值之间的关联,而不像sort()被拆分。

ksort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demo</title>
</head>
<body>
<?php
$one = array('f' => 'fffff', 'd' => 'dddd','a' => 'aaaa','g' => 'gggg');
ksort($one);
print_r($one);
?>
</body>
</html>

ksort()函数与asort()函数一样,对数组的键名进行重新排序,排序后的键名仍然与键值关联

降序

在PHP中,升序的函数都有一个对应的降序排序,主要是 rsort、arsort、krsort三个,分别对应sort、asort、ksort三个函数:

sort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb');
rsort($arrayName);
print_r($arrayName);
?>
</body>
</html>
arsort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb');
arsort($arrayName);
print_r($arrayName);
?>
</body>
</html>
krsort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array('c' => 'cccc','a' =>'aaaa','b' => 'bbbb');
krsort($arrayName);
print_r($arrayName);
?>
</body>
</html>
多数组排序
array_multisort()

array_multsiort函数可以一次对多个数组进行排序,或根据多个数组的一个或多个多个数组进行排序,如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$one = array(3,5,2,4,1);
$two = array(6,7,8,9,10);
array_multisort($one,$two);
print_r($one);
echo "<br>";
print_r($two);
?>
</body>
</html>
数组的重新排序
shuffle()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$one = array(1,20); // 产生有序数组
foreach ($one as $value)
echo "$value"; // 输出有序数组
shuffle($one); // 打乱数组顺序
foreach ($one as $value) {
echo "$value"; // 输出新的数组顺序
echo "<br>";
}
?>
</body>
</html>

使用shuffle函数可以将数组按照随机的顺序进行排列,并删除原有的键名从而自动建立自动索引。

array_reverse()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$one = array('a' => 1,2,3,4,5);
$two = array_reverse($one,TRUE);
print_r($two);
?>
</body>
</html>

array_reverse()函数主要作用是将数组按照相反的顺序进行排序。如果array_reverse()函数的参数是TRUE则保留原来的键值,但为FALSE则为数组重新建立索引,而array_reverse()函数默认为FALSE;

自然排序
natsort()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<body>
<?php
$arrayName = array("data-2","data-1","data-3","data-4");
natsort($arrayName);
print_r($arrayName);
?>
</body>
</html>

自然排序,是指natsort函数对字母、数字、字符串进行排序,并保持源于的键/值的关联即称之为自然排序

例子
计算并根据分数进行排序和提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 html>
<html>
<head>
<meta charset="utf-8">
<title>demos</title>
</head>
<style type="text/css">
</style>
<body>
<?php
echo "<form method=post>";
for($i=1;$i<6;$i++) {
// 名字框的名字即数组名
echo "学生".$i."的分数为<input type=text name='stu[]'><br>";
}
echo "<input type=submit name=sumb value='开始提交'>";
echo "</form>";
echo "<br>";

if (isset($_POST['sumb'])) {
$sum = 0; // 总成绩初始化为0
$min = 0; // 分数小于60的人初始化为0
$stu = $_POST['stu']; // 取得所有分本框值并赋值给数组$stu
$num = count($stu); // 计算数组$stu元素的个数
echo "本次总共录入的成绩有:<br>";
}
foreach ($stu as $score) { // 循环遍历数组 $stu
echo $score."&nbsp;"; // 输出数组的接收值
$sum = $sum + $score; // 计算总成绩
if ($score < 60) { // 判断分数小于 60 的情况
$sco[$min] = $score; // 将分数小于60的值赋给数组$min
$min++; // 分数小于60的人数+1
}
}
rsort($stu);
echo "<br><hr>成绩由高到低的排名如下:<br>";

foreach ($stu as $valuetwo) {
echo $valuetwo."&nbsp;"; // 输出降序排列数据
echo "<br><hr>成绩低于60分的如下:<br>";
for ($min=0;$min < count('sco');$min++) // 使用for循环输出$sco数组
echo $sco[$min]."&nbsp;";
$average = $sum/$num; // 计算平均成绩
echo "<br><hr>总共平均分为:<br>$average"; // 输出平均成绩
echo "<hr>";
}
?>
</body>
</html>
ID DA FA
array_keys 输出数组中所有的键名 数值
array_values 输出数组中所有的数值
array_unique 移除数组中重复的值
in_array 检测键值是否存在
array_key_exists 检测键名是否存在
array_search 检测是否存在[^如果键值存在则返回键名,不存在则返回NULL]
sort() 数组的升序[^重新排序,同时删除原来的键名,重新分配索引] 排序的升序
asort() 数组的升序[^数组重新排序后仍然保持着键名与键值的关联]
ksort() 数组的升序[^对数组的键名进行重新排序,排序后仍然保持着键名与键值的关联]
sort() 数组的降序[^重新排序,同时删除原来的键名,重新分配索引] 排序的降序
arsort() 数组的降序[^数组重新排序后仍然保持着键名与键值的关联]
krsort() 数组的降序[^对数组的键名进行重新排序,排序后仍然保持着键名与键值的关联]
array_multisort() 一次对多个或一个数组进行排序 数组的多排序
shuffle() 数组的重新排序[^删除原有的键名从而自动建立索引] 数组的重新排序
array_reverse() 将数组按照相反的顺序进行排序[^如果参数为“TRUE”则保留原来的键值,但为“FALSE”参数则重新建立索引,默认为FALSE]
natsort() 自然排序[^对字母、数字、字符串进行排序,并保持原来的键值关联即称之为“自然排序”] 数组的自然排序
list List主要的作用实现数组的循环遍历 循环
⬅️ Go back